home *** CD-ROM | disk | FTP | other *** search
/ Die Ultimative Software-P…i Collection 1996 & 1997 / Die Ultimative Software-Pakete CD-ROM fur Atari Collection 1996 & 1997.iso / d / diskmoni / fedit / fedit.dok next >
Encoding:
Text File  |  1996-11-17  |  62.6 KB  |  1,193 lines

  1.                                       
  2.                                       
  3.                                       
  4.                                       
  5.                                       
  6.                                       
  7.                                       
  8.                                       
  9.                                       
  10.                                       
  11.                                       
  12.                                       
  13.                                       
  14.                                       
  15.                                       
  16.                                       
  17.                                       
  18.                                       
  19.                                       
  20.                                       
  21.                                       
  22.                                       
  23.                                       
  24.                      Dokumentation zum Programm: FEDIT
  25.                                       
  26.                              Stand: 26.07.1989
  27.                                       
  28.                                PUBLIC DOMAIN
  29.  
  30.  
  31.  
  32.  
  33.  
  34.                                       
  35.                                       
  36.                                       
  37.                                       
  38.                                       
  39.                                       
  40.                                       
  41.                                       
  42.                                       
  43.                                       
  44.                                       
  45.                                       
  46.                                       
  47.                                       
  48.                                       
  49.                                       
  50.                                       
  51.                                       
  52.                                       
  53.                                       
  54.                                       
  55.  
  56.  
  57. Inhalt (Numerierung bezogen auf 56 Zeilen/Seite) 
  58.  
  59. 1   Copyright  . . . . . . . . . . . . . . . . . . . . . . .    3
  60. 2   Was FEDIT ist (und was nicht)  . . . . . . . . . . . . .    3
  61. 3   Konventionen und allgemeine Eigenschaften  . . . . . . .    5
  62. 4   FEDIT als File Editor  . . . . . . . . . . . . . . . . .    5
  63.    4.1  Kommandozeilenformat . . . . . . . . . . . . . . . .    5
  64.    4.2  Das Konzept der 'Filepuffer' . . . . . . . . . . . .    6
  65.    4.3  Fileanzeige und Eingabemöglichkeiten . . . . . . . .    7
  66.    4.4  Marker und Offset- Funktionen  . . . . . . . . . . .    8
  67.    4.5  Blockmarkierung und Blocktransfer  . . . . . . . . .    9
  68.    4.6  Suchen und Ersetzen; Verknüpfungsmodi  . . . . . . .   10
  69.    4.7  Ungleichheit suchen  . . . . . . . . . . . . . . . .   12
  70.    4.8  Pfad setzen und Directory  . . . . . . . . . . . . .   12
  71. 5   Der Memory- Modus  . . . . . . . . . . . . . . . . . . .   13
  72.    5.1  Unterschiede zum File- Modus . . . . . . . . . . . .   13
  73.    5.2  Die GEMDOS- Funktionen . . . . . . . . . . . . . . .   14
  74. 6   Der Image- Modus (Speicher zeigen als Bild)  . . . . . .   15
  75. 7   FEDIT resident; Aufruf und Einschränkungen . . . . . . .   16
  76.    7.1  Allgemeines  . . . . . . . . . . . . . . . . . . . .   16
  77.    7.2  RESET- Residenz  . . . . . . . . . . . . . . . . . .   16
  78.    7.3  'Unbedingter' Aufruf . . . . . . . . . . . . . . . .   17
  79.    7.4  Bedingter Aufruf . . . . . . . . . . . . . . . . . .   17
  80.    7.5  Beschränkungen des Aufrufs . . . . . . . . . . . . .   18
  81.    7.6  Anpassung an weitere TOS- Versionen  . . . . . . . .   18
  82. 8   FEDIT- 'Systemvariablen' . . . . . . . . . . . . . . . .   19
  83.    8.1  Inhalt des entsprechenden Bereichs von FEDIT . . . .   19
  84.    8.2  Und Erläuterungen dazu . . . . . . . . . . . . . . .   20
  85. 9   Beispiele für den Umgang mit FEDIT . . . . . . . . . . .   22
  86. 10  Abschied . . . . . . . . . . . . . . . . . . . . . . . .   23
  87.  
  88.  
  89.  
  90.  
  91.  
  92.  
  93.  
  94.  
  95.  
  96.  
  97.  
  98.  
  99.  
  100.  
  101.  
  102.  
  103.  
  104.  
  105.  
  106.  
  107.  
  108.  
  109.  
  110.  
  111.  
  112.  
  113. 1   Copyright
  114.  
  115. Das Programm FEDIT.PRG und diese Dokumentation wurden erstellt von
  116.  
  117. Bernd Feige
  118. Regerstraβe 20 | Probsteistraβe 8
  119. 5750 Menden 2  | 4400 Münster
  120. Konto Nr. 7531072 BLZ 447.500.65
  121.  
  122. Programm und Dokumentation dürfen und sollen frei kopiert und weitergegeben
  123. werden,  unter der Voraussetzung,  daβ die  Files  zusammenbleiben  und die
  124. Urhebervermerke in beiden nicht gelöscht oder verändert werden.
  125.  
  126. Der Autor übernimmt keine Haftung für  Schäden,  die  durch  die Verwendung
  127. dieses Programmes entstehen;  Ebensowenig haftet er für  die Verwendbarkeit
  128. des Programmes für irgendeinen bestimmten Zweck.
  129.  
  130. Wie bei  PUBLIC  DOMAIN-  Programmen  üblich,  wird  die  Entrichtung eines
  131. angemessen   erscheinenden   Obulus  an  den   Autor  dem  Programmbenutzer
  132. freigestellt.
  133.  
  134.  
  135. 2   Was FEDIT ist (und was nicht)
  136.  
  137. Nach den üblichen Formalitäten nun ein paar Bemerkungen zu FEDIT: 
  138.  
  139. Der  Name  FEDIT steht  eigentlich  für  File  EDITor.  Das  Programm wurde
  140. ursprünglich geschrieben,  um  beliebige Files  ansehen  und  bearbeiten zu
  141. können.  Weil  es  so  nahe  lag,  ist auβerdem  ein  Memory  Editor daraus
  142. geworden.   Oft  sind  Daten-   und  Filestrukturen  von  Programmen  nicht
  143. dokumentiert,  was  der  Schaffung  vermittelnder  Programme  nicht  gerade
  144. förderlich ist.  Die hohe Versionsnummer von FEDIT (6.2)  dokumentiert, daβ
  145. ich dem Editor jeweils die Eigenschaften hinzugefügt habe,  die zur Analyse
  146. nützlich waren. Jedenfalls war die Erstellung von FEDIT nicht Selbstzweck.
  147. Die vorliegende Version von FEDIT selbst wurde mithilfe von FEDIT  aus zwei
  148. getrennt übersetzten Assemblerprogrammen  zusammengesetzt (Tatsächlich: Das
  149. Hauptprogramm  wurde  in  einen  reservierten  Bereich  des Laderprogrammes
  150. eingesetzt).
  151.    
  152. - Visuelle Ganzschirm- Bearbeitung von Files und Speicher
  153. - Anzahl gleichzeitig im Speicher gehaltener Files und Puffer beliebig
  154. - 7 Marker über einfachen Tastendruck zu erreichen
  155. - Block-  Markierung und Transfer auch zwischen Files sowie  zwischen Files
  156. und Speicher RAM/ROM
  157. - Schnelles Suchen und Ersetzen (auch unter Änderung der Filelänge)
  158. - Vergleich von Code- Passagen 
  159. - Anzeige und Eingabe von Byte-,  Word-  und  Long-  Inhalten der aktuellen
  160. Position in Dezimal oder Hex
  161. - Offset- Funktionen 
  162.  
  163. - Verschiedene GEMDOS-  Befehle aus dem MEMORY- Menu zugänglich: Aufruf/nur
  164. Laden/nur    Starten   anderer   Programme,    Directory,    Freigabe   von
  165. Speicherblöcken, Speicherblockgröβe verändern
  166.  
  167. - Residentes Installieren:
  168. - FEDIT  wird  aufgerufen  nach  einem Reset oder  Systemabsturz, bevor der
  169. Speicher gelöscht wird; Man kann sich seine Daten wieder rekonstruieren
  170. (Hierzu Dank an Martin Wielebinski für seinen  informativen  Artikel in der
  171. C't 6/89)
  172. - FEDIT merkt,  wenn es im Rahmen des Bootens (Autoordner) gestartet wurde,
  173. und installiert sich dann automatisch resident
  174. - Das bekannte  Problem  resetresidenter  (Autoordner-)  Programme  mit dem
  175. Löschen des Speichers bis $ffff vor deren Aufruf wird umgangen, indem FEDIT
  176. seinen Bildschirmspeicher VOR dem eigenen Programmtext  positioniert (damit
  177. ist der Programmtext von FEDIT auf jeden Fall aus der Gefahrenzone heraus)
  178. - FEDIT ist in (fast)  jeder Situation über die  Shifttasten aufrufbar; Man
  179. kann sich die Programme im Speicher,  deren Stack und  Daten ansehen, Teile
  180. davon  abspeichern oder  verändern  und  (mit  Vorbehalt)  andere Programme
  181. aufrufen, das unterbrochene Programm dann seine Arbeit fortsetzen lassen.
  182. - Die Unterbrechung von Programmen kann per Option auch  selektiv erfolgen,
  183. d.h. FEDIT wird nur gestartet, wenn sich die Abarbeitung beim Interrrupt in
  184. einem  bestimmten  Speicherbereich befand  (Line A-  Routine  markieren und
  185. schauen, ob ein bestimmtes Programm diese Routine (regelmäβig) benutzt...)
  186. - Die nichtdokumentierten und TOS-  versionsabhängigen Systemvariablen, die
  187. von dem  Interrupt-  Teil  von  FEDIT  verwendet  werden,  holt  FEDIT sich
  188. entsprechend dem TOS-  Datum aus einer Tabelle,  in der noch freie Einträge
  189. sind;  Für ROMTOS vom 6.02.1986,  Blitter- ROMTOS vom 22.04.1987 und RAMTOS
  190. vom 18.05.1988 sind die notwendigen Adressen bereits eingetragen
  191.  
  192. - FEDIT arbeitet auch mit Farbmonitor; Palette und Auflösung werden für die
  193. Laufzeit des Programms auf eigene Werte umgestellt,  um immer  die gewohnte
  194. Umgebung zu bieten
  195.  
  196. - Anzeigen  von  Files  oder  Speicher  als  Bild  einstellbarer  Breite in
  197. verschiedenen Auflösungen mit der Palette,  mit der FEDIT aufgerufen wurde;
  198. Zum Lokalisieren von Bildern,  Bildausschnitten und Icons im  Speicher oder
  199. zum schnellen Überblick über  die  Speicherbelegung  durch halbseitenweises
  200. Scrolling
  201.  
  202. - Die  wichtigsten und informativsten  'Systemvariablen'  von FEDIT sind am
  203. Ende des Programmtextes angeordnet und mit Kurzwörtern  markiert,  die (mit
  204. FEDIT) leicht aufzufinden sind
  205.  
  206. - FEDIT  ist KEIN  Texteditor  (man  munkelt,  dafür gäbe  es komfortablere
  207. Programme;  obwohl man mit FEDIT natürlich auch Texte erstellen könnte, und
  208. schlieβlich könnte man damit auch  lauffähige Maschinenprogramme schreiben,
  209. wenn man mit den Bits auf gutem Fuβe steht)
  210.  
  211. - FEDIT ist kein GEM- Programm. (Falls es das wäre, wäre es nicht so leicht
  212. möglich,  GEM-  Programme folgenlos zu unterbrechen.) Je nach Geschmack ist
  213. das  sicherlich  für die ein  Manko,  die  schon  verlernt  haben,  wie man
  214. Tasstatur überhaupt schreibt
  215.  
  216. - FEDIT ist nicht kindersicher.  Wenn man den Hauptspeicher (am  besten die
  217. 'zero page')  als Block markiert  und per Tastendruck diesen  Block löschen
  218. läβt, muβ man schon wissen, was man tut...
  219.  
  220. - Im  Interesse  der  Vermeidung  gewaltiger   Systemabstürze  werden  beim
  221. Aktivieren über  Shifttasten keine GEMDOS-  Funktionen bei  ihrer wichtigen
  222. Arbeit  unterbrochen.   (FEDIT  selbst  verwendet  GEMDOS-  Funktionen;  Im
  223. Gegensatz zum BIOS,  dessen Savebereich noch recht einfach  zu sichern ist,
  224. ist GEMDOS  durch die Vielzahl  fester  Speicherstellen und Puffer,  die es
  225. benutzt,  hochgradig nicht- reentrant)  Man kommt also gerade aus besonders
  226. einfachen Programmen (FEDIT selbst ist so eines), die die meiste Zeit ihres
  227. Lebens  mit  GEMDOS-  Zeicheneingabe-  Funktionen  verbringen,  nicht  ohne
  228. weiteres in das residente FEDIT. 
  229. - Die selbstverständliche zweite Einschränkung ist,  daβ FEDIT Anfragen auf
  230. Aufruf zurückweist, solange gerade ein Floppyzugriff stattfindet (flock).
  231.  
  232.  
  233. 3   Konventionen und allgemeine Eigenschaften
  234.  
  235. - Zahlen  und   Filenamen   werden  in  FEDIT   mithilfe   einer  einfachen
  236. Zeileneingabefunktion eingegeben.  Darin kann man mit Backspace das jeweils
  237. zuletzt  eingegebene Zeichen  löschen,  mit  Escape  löscht  man  die ganze
  238. Eingabezeile. Weitere Editiermöglichkeiten stehen nicht zur Verfügung.
  239. - Allgemein steht eine Leereingabe dabei für 'Operation nicht durchführen'.
  240. - Zahlen können in dezimal oder, durch Voranstellen eines '$'- Zeichens, in
  241. Hexadezimal eingegeben  werden.  Negative Zahlen  durch  setzen  eines '-'-
  242. Zeichens vor die ganze (Hex oder Dezimal-) Zahl.
  243. - Alle Markierungen von Positionen sind  Speicher-  absolut. Das heiβt, daβ
  244. man zum Beispiel in  einem Filepuffer Blockmarkierungen  oder Marker setzen
  245. kann und im Memory-  Modus dann an die Stelle  im Speicher gelangt,  an der
  246. der  Filepuffer  steht,  wenn man auf diese  Markierung positioniert. Weder
  247. Marker noch Block-  Markierungen beschränken sich also auf einen bestimmten
  248. Puffer (Wenn man will, kann man auch in einem File Blockanfang und in einem
  249. anderen Blockende markieren, und hat damit den ganzen Speicher zwischen den
  250. beiden Filepuffern mitmarkiert).
  251. - Filenamen müssen  immer vollständig  gegeben  werden  (Zum  Beispiel beim
  252. Aufruf von Programmen: Endung nicht vergessen !)
  253. - Beim Abspeichern auf Diskette erscheint, wenn das angegebene File bereits
  254. existiert,  eine Sicherheitsabfrage, die es ermöglicht, das bestehende File
  255. zu überschreiben,  das zu schreibende an das bestehende anzuhängen oder das
  256. Abspeichern abzubrechen.
  257.  
  258.  
  259. 4   FEDIT als File Editor
  260.  
  261. 4.1  Kommandozeilenformat
  262.  
  263. Wenn FEDIT aus  einer  Shell  aufgerufen  oder  als  'Tos  Takes Parameter'
  264. angemeldet   wird,   kann   der   Name   eines   zu   ladenden   Files  als
  265. Kommandozeilenparameter angegeben werden. 
  266. Der Aufruf aus einer Shell hat die Form
  267.  
  268.      FEDIT filename zusatzlänge
  269. oder FEDIT +pufferlänge
  270.  
  271. wobei filename der vollständige Pfad und Filename des zu ladenden Files ist
  272. und zusatzlänge die Anzahl von Bytes,  um die der Speicher (Puffer), in den
  273. das File  geladen wird,  länger  sein  soll  als  das  File.  Dabei  ist zu
  274. beachten,  daβ die Filelänge nur im Rahmen  der Länge des  Puffers geändert
  275. werden kann. 
  276. Wird nur ein '+'- Zeichen, gefolgt von einer Zahl, angegeben, so erhält man
  277. einen leeren Puffer, dessen Filelänge zunächst gleich der Pufferlänge ist.
  278.  
  279. Wenn man FEDIT ohne Argumente aufruft,  so wird man nach einer Eingabezeile
  280. gefragt (wenn man die Zusatzlänge nicht in  einer  Zeile  mit  angibt, wird
  281. danach getrennt gefragt).
  282. Der Eingangsschirm,  der auf diese  Weise die Form  des ersten anzulegenden
  283. Filepuffers erfragt,  sieht etwas mager aus.  Das  liegt  daran,  daβ FEDIT
  284. seine Puffer  als verkettete  Struktur  organisiert und das  Hauptmenu erst
  285. dann anbieten kann, wenn mindestens ein Puffer vorhanden ist.
  286.  
  287. Will man FEDIT also 'nur'  als Memory-  Editor verwenden, so wird man FEDIT
  288. zum  Beispiel  mit '+100'  als Eingabezeile  versehen.  (Daβ man  als Länge
  289. selten '1'  wählen wird,  liegt daran,  daβ man einen leeren Puffer gut für
  290. die Eingabe von Find- und Replace- Strings gebrauchen kann)
  291.  
  292.  
  293. 4.2  Das Konzept der 'Filepuffer'
  294.  
  295. Filepuffer  sind  schlicht  mit  den  Betriebssystemfunktionen reservierte,
  296. zusammenhängende Regionen  im  Speicher  des Rechners.  Das  Programm FEDIT
  297. selbst gibt direkt nach dem Programmstart allen Speicherplatz, den es nicht
  298. selbst benötigt, wieder an das Betriebssystem zurück. (Im Memory- Menu gibt
  299. es  eine   Funktion,   die   die   Länge   des   gröβten  zusammenhängenden
  300. Speicherblocks anzeigt, der noch verfügbar ist.)
  301. Mit den Funktionen 'Leeren Filepuffer schaffen', 'Filepuffer freigeben' und
  302. 'Nächstes File laden'  kann man diese Puffer behandeln.  Ein Filepuffer hat
  303. eine absolute Länge ('End of Buffer')  und eine Filelänge ('End  of File'),
  304. die höchstens so groβ sein kann wie die Pufferlänge. Ferner gehört zu jedem
  305. Puffer  eine  eigene  aktuelle  Cursorposition innerhalb des  Files und ein
  306. Veränderungsstatus,  der angibt, ob der Benutzer bereits einer Änderung des
  307. Inhalts und/oder  der Länge des Files zugestimmt  hat.  (Bei leeren Puffern
  308. oder   im  Memory-   Modus  wird  diese  Zustimmung  als   bereits  gegeben
  309. angenommen.)
  310. Mit 'EOF verschieben auf...' (EOF steht für End Of File) kann man die Länge
  311. des  Files auf bestimmte Werte  innerhalb  des  Filepuffers  einstellen. Es
  312. handelt sich dabei nur um eine 'weiche Markierung',  der Inhalt des Puffers
  313. hinter dieser Marke ist nur unzugänglich, aber nicht gelöscht. Wenn man mit
  314. 'File abspeichern'  das File auf Diskette schreibt, wird nur der Puffer bis
  315. zur 'End of File'- Position geschrieben. 
  316.  
  317. Die (theoretisch beliebig vielen)  Puffer bilden eine verkettete  Liste, in
  318. der man sich mit 'Nächsten Filepuffer' und 'Vorigen Filepuffer' fortbewegen
  319. kann. Neue Puffer werden am Ende der bisherigen Kette angehängt. (Die Kette
  320. bildet  nur eine  logische  Verknüpfung der  einzelnen  Puffer;  In welcher
  321. Reihenfolge und wo überhaupt sie im Speicher stehen,  ist Sache des GEMDOS.
  322. Wenn man etwa drei  Puffer hat und  den mittleren freigibt,  um dann wieder
  323. einen Puffer gleicher Gröβe zu schaffen, wird dieser Puffer in der Regel an
  324. derselben Speicherposition  stehen  wie der gelöschte;  Aber  in  der Kette
  325. hängt er nun hintenan)
  326. FEDIT merkt sich nicht die Namen der Files,  die in  die  jeweiligen Puffer
  327. geladen wurden.  Man muβ den Filenamen beim Abspeichern nochmals eintippen.
  328. Dafür hat man so gröβere Sicherheit, daβ man nicht ungewollt eine wertvolle
  329. Sourcedatei überschreibt.
  330.  
  331.  
  332. 4.3  Fileanzeige und Eingabemöglichkeiten
  333.  
  334. Zum Programmbeginn und wenn man im Menu die Eingabetaste betätigt, befindet
  335. man sich im Editiermodus des aktuellen Files.
  336. Dabei  wird  das  aktuelle  File  durchgängig  mit  80  Zeichen  pro  Zeile
  337. angezeigt.  Eine Zeile fängt immer an einer durch 80 teilbaren Fileposition
  338. an.  FEDIT versucht, die Zeile, in der der Cursor steht, auf dem Bildschirm
  339. zu zentrieren, wenn der Schirm neu aufgebaut wird. Der Cursor kann mithilfe
  340. der Cursortasten oder mit  der Maus bewegt werden.  (Im Menu kann  man auch
  341. eine gewünschte  Position  als Zahl  angeben.  Die Position  stimmt mit den
  342. gängigen Filepositionsangaben  überein,  wie  sie  etwa  von  SEEK verlangt
  343. werden.)   Betätigen  der  Tastatur  führt  in  der  Regel  dazu,  daβ  die
  344. entsprechenden  Zeichen  unter  Weiterrücken  des   Cursors   in  das  File
  345. geschrieben werden.  ('File'  steht hier für das 'File'  im Speicher, so es
  346. denn so etwas gibt, nicht für ein File auf Diskette.) Es kann sein, daβ man
  347. erst die  Bestätigung  zur  Veränderung  des  Files  geben  muβ,  bevor der
  348. Tastendruck  tatsächlich geschrieben wird.  Dazu achte man auf  den unteren
  349. Rand des Schirms !
  350. Die unterste  Zeile des Bildschirms  enthält  eine  Infozeile,  in  der die
  351. aktuelle  Cursorposition  sowie der Inhalt  des Bytes unter  dem  Cursor im
  352. gewählten Zahlensystem angezeigt werden.
  353.  
  354. - Mit der HELP-  Taste erhält man eine kurzgefaβte Beschreibung der Tasten,
  355. denen bestimmte Funktionen zufallen. 
  356. - Mit der Escape- Taste gelangt man zum Menu.
  357. - Halbseitenweise vor/zurück kommt man mit <shift>Cursor down/up
  358. - Den  Byteinhalt  der  aktuellen  Position  kann   man  mit  <shift>Cursor
  359. left/right herunter/heraufzählen
  360. - Das Zeichen an der aktuellen Position unter Aufschieben des Rests löschen
  361. (Änderung  der  Filelänge)  mit  Delete  (Die  Taste  Backspace  hat  keine
  362. Funktion)
  363. - Einfügen  eines Null-  Zeichens unter Wegrücken des  Rests  (Änderung der
  364. Filelänge) mit Insert
  365. - Cursor  auf  Fileanfang/Ende  setzen  mit  Home/<sweet>Home   (wer  keine
  366. <sweet>- Taste an seinem Rechner hat, verwende einfach die Shifttaste)
  367. - Anzeigen des Positionsinhalts  (das  ist  der  Inhalt  der entsprechenden
  368. Anzahl von Speicherstellen ab  der  aktuellen  Position)  Byte/Word/Long (1
  369. Byte,  2 Bytes oder 4 Bytes entsprechend der üblichen Zahlendarstellung des
  370. Prozessors zusammengefaβt) mit den Funktionstasten F1/F2/F3
  371. - Anzeigen  des  Positionsinhalts  Byte/Word/Long  als  negative  Zahl  mit
  372. <alt>F1/F2/F3  (FEDIT stellt eine Zahl wie $ffff.w nicht automatisch als -1
  373. dar)
  374. - Umschalten  der Zahlendarstellung zwischen  Dezimal  und  Hexadezimal mit
  375. <ctrl>UNDO
  376. - Eingeben des Positionsinhalts Byte/Word/Long mit <shift>F1/F2/F3
  377.  
  378.  
  379. 4.4  Marker und Offset- Funktionen
  380.  
  381. Die Funktionstasten F4  bis F10  sind den sieben Positionsmerkern von FEDIT
  382. zugeordnet.
  383. Mit   <shift>F4-F10   wird  die  aktuelle  Position  im   Speicher  in  dem
  384. entsprechenden Merker  abgelegt;  Mit F4-F10  wird versucht, den Cursor auf
  385. die  Speicherposition  zu setzen,  die von dem jeweiligen  Merker angegeben
  386. wird.  Das ist kein Problem,  wenn die gespeicherte Position im Bereich des
  387. aktuellen  Filepuffers liegt;  Ansonsten kommt man an  das Ende  des Files,
  388. welches  der gespeicherten Position  am  nächsten liegt.  (In allen Merkern
  389. steht bei  Programmbeginn der Wert 0,  der der absoluten  Speicheradresse 0
  390. entspricht.)  Natürlich  kommt man,  wenn  man einen Merker  im selben File
  391. abfragt,  in dem man  ihn  gesetzt  hat,  wieder  an  dieselbe Fileposition
  392. zurück,  an  der man ihn  gesetzt  hat;  Für  das  Verständnis  der Offset-
  393. Funktionen  sollte  man  aber  schon  wissen,   daβ  eigentlich  nicht  die
  394. Fileposition gespeichert wird,  sondern  die  Position  im  ganzen Speicher
  395. (nämlich die Speicheradresse).  Wenn man also einen Marker in einem anderen
  396. File abfragt als setzt, so kommt man nicht auf die gleiche Fileposition des
  397. jetzigen Files.
  398.  
  399. Nun zu den ominösen Offset- Funktionen:
  400. In vielen Nicht-  Text- Dateien kommen Adressen im weitesten Sinne vor. Das
  401. sind Zahlen in  Maschinenform (also Byte-,  Word-  oder Longwerte), die auf
  402. bestimmte Positionen in der Datei (oder im Speicher) zeigen. Im Prinzip ist
  403. jede Adresse relativ,  da sie die Anzahl Speicherstellen angibt, um die man
  404. von einer  bestimmten  Position  aus  weitergehen  muβ,  um  die gewünschte
  405. Position  zu  erreichen.  Bei den sogenannten 'absoluten'  Adressen ist die
  406. Ursprungsposition der Anfang des vorhandenen Speichers.
  407. Ein Beispiel  für eine  im  engeren Sinne  relative  Adresse  ist  etwa die
  408. Textsegmentlänge  eines Programmes,  die  in dessen 28  Bytes langen Header
  409. ('Vorspann')  ab  Position 2  steht (ein Langwort).  Da das Textsegment bei
  410. Position 28  beginnt und das Datensegment sich direkt anschlieβt,  gibt die
  411. Textsegmentlänge  praktisch die Adresse des  Datensegments  an  relativ zur
  412. Position 28.  Was würde man nun tun,  um an den Anfang des Datensegments zu
  413. gelangen ?  Man könnte sich mit dem Cursor auf Position 2  begeben und (mit
  414. F3)  den Langwort- Inhalt, also die Textsegmentlänge, anzeigen lassen. Dann
  415. würde man 28  addieren  und über  das Menu  den Cursor  auf  die errechnete
  416. Stelle setzen.
  417. Da ähnliche  Probleme  (bei  mir)  häufiger  auftreten,  bietet  FEDIT eine
  418. einfachere Möglichkeit:  Man gehe  nach  Position  28  und  speichere diese
  419. Position in einen Merker;  Danach gehe man auf die Position  2,  die ja die
  420. Angabe darüber enthält,  wie viele Zeichen man von Position 28 weiterrücken
  421. muβ, um die gewünschte Position zu erreichen, und drücke <alt> zusammen mit
  422. der Taste des Merkers,  auf den man die Position 28 gelegt hat. FEDIT liest
  423. den Inhalt der aktuellen Position,  addiert den Merker und setzt den Cursor
  424. an die resultierende Stelle,  in unserem Falle also  direkt  auf  das erste
  425. Byte des  Datensegments.  Wenn  man  nun  diese  Position  in  einen Merker
  426. speichert und auf die Fileposition 6  geht, die die Länge des Datensegments
  427. enthält, sodann <alt> zusammen mit dem Merker drückt, in den man den Anfang
  428. des  Datensegments gespeichert hat,  gelangt man  auf  das  erste  Byte des
  429. sogenannten  Relocation  Tables.  Auch  die  sollte  man  in  einen  Merker
  430. übernehmen,  aber nur,  damit man schneller zurückkommt. Das erste Langwort
  431. des  Relocation Tables enthält die Position  der ersten  Speicherstelle des
  432. Programmes, die beim Laden desselben reloziert werden muβ; Relozieren heiβt
  433. hier das  Ersetzen  von  Adressen,  die  relativ  zum  Programmbeginn, also
  434. relativ zu unserem Marker  28,  angegeben sind,  durch die Adressen relativ
  435. zum  Speicherbeginn,  also die absoluten Adressen.  Auch diese Position der
  436. ersten zu relozierenden Programmstelle ist relativ zum  Marker  28 gemeint.
  437. Man kann also diese Speicherstelle mit <alt>Marker 28 anspringen. (Wenn man
  438. nun  gleich  wieder  <alt>Marker  28  drücken  wurde,  gelänge  man  zu der
  439. Position,  die das Programm an dieser Stelle ansprechen will.  Das kann zum
  440. Beispiel der Anfang einer  auszugebenden Meldung sein)  Auch diese Position
  441. sollte  man  sich  merken,  denn  die  nächsten  zu  relozierenden  Stellen
  442. erreichen wir,  indem wir von dieser Position aus weiterrücken. Man gehe an
  443. die Relokationstabelle zurück  und 4  Bytes weiter.  Bislang sind wir davon
  444. ausgegangen,  daβ  FEDIT die aktuelle  Speicherstelle  mit  dem  Offset als
  445. Langwort liest.  Mit <shift>Help  kann  man  dieses  Verhalten  ändern. Wir
  446. schalten auf 'Byte pos.  Modus', was heiβen soll, daβ Offsets nun als Bytes
  447. statt als Langworte behandelt werden.  Die nunmehr aktuelle Position stellt
  448. einen solchen Offset in Bytegröβe dar, und zwar den Abstand von der letzten
  449. Relokationsposition zur nächsten.  Man gelangt also durch Drücken von <alt>
  450. zusammen mit  dem  Merker  der  letzten  Relokationsposition  zur nächsten.
  451. (nebenbei:  Der  Byteinhalt 1  steht für '254  Bytes weiterrücken und nicht
  452. relozieren', eine Null kennzeichnet das Ende der Tabelle.)
  453.  
  454. Es gibt  auch  eine  Funktion,  die einem das Ausrechnen und  Eintragen von
  455. Offsets erspart, die man selbst schreiben möchte: Mit <ctrl>F5-F10 wird die
  456. Differenz  zwischen  dem Merker  der gedrückten Funktionstaste und  dem der
  457. vorigen in der eingestellten Länge (Byte,  Word oder Long)  in die aktuelle
  458. Position geschrieben. Wenn man also zum Beispiel die Textsegmentlänge eines
  459. Programmes  eintragen  wollte,  würde  man  etwa  die  Position  28  auf F4
  460. speichern und den Anfang des Datensegments auf F5.  Dann würde man Position
  461. 2  aufsuchen und dort <ctrl>F5 drücken, nachdem man sich überzeugt hat, daβ
  462. der 'Pos.  Modus' auf 'Long' gestellt ist, damit die Differenz als Langwort
  463. an die aktuelle Position geschrieben wird.  Auf die gleiche  Weise kann man
  464. auch angesprochene Adressen in einem Programm ändern.
  465.  
  466.  
  467. 4.5  Blockmarkierung und Blocktransfer
  468.  
  469. Um Abschnitte innerhalb von Files oder im  Speicher zu markieren,  kann man
  470. mit UNDO und <shift>UNDO oder mit  der linken und  rechten Maustaste Anfang
  471. und Ende des markierten  Blocks angeben.  Die Markierung erfolgt inklusive,
  472. das  heiβt die Zeichen,  auf  denen  man  stand,  als  man  Blockanfang und
  473. Blockende markierte, gehören beide mit zum Block.
  474. Mit  <ctrl>Cursor up/down wird die aktuelle  Position  auf die Blockanfang/
  475. Blockendemarke gesetzt.
  476. Im Menu  kann  man zunächst  drei  Dinge auswählen,  die mit dem markierten
  477. Block geschehen sollen:  Man kann den Blockinhalt an die  aktuelle Position
  478. im aktuellen File kopieren lassen (wobei völlig egal ist,  ob der markierte
  479. Block sich im aktuellen File selbst, in einem anderen File oder irgendwo im
  480. Speicher befindet),  man kann  den Inhalt  des markierten  Blocks als Datei
  481. abspeichern  oder den Inhalt des markierten  Blocks  löschen ('Zero Block',
  482. das heiβt, daβ der Blockbereich mit Nullen aufgefüllt wird).
  483. Beispielsweise  ist  es,   wenn  man  längere  Abschnitte  aus  einem  Text
  484. herausnehmen  will,  sehr  mühsam,  das  mit  der  Delete-  Taste  zu  tun;
  485. Stattdessen wird man die Stelle,  an der der zu erhaltende Text weitergeht,
  486. als Blockanfang und das  Fileende  als  Blockende  markieren,  diesen Block
  487. dorthin kopieren,  wo das herauszunehmende  Stück beginnt und dann  im Menu
  488. die Filelänge auf den neuen Wert ändern.
  489.  
  490.  
  491. 4.6  Suchen und Ersetzen; Verknüpfungsmodi
  492.  
  493. FEDIT  verfügt über  eine  Funktion,  mit  der man  im  Filepuffer  oder im
  494. Speicher nach  dem Vorkommen  einer  beliebigen  Folge  von  Zeichen suchen
  495. lassen  kann.  Um  für  die  Eingabe  solcher  Zeichenfolgen  die  gesamten
  496. bestehenden  Editierfunktionen zur Verfügung  zu  haben,  wird  einfach der
  497. aktuelle Blockinhalt als zu suchende Zeichenkette aufgefaβt.  Wenn man also
  498. in einem File  nach der Zeichenfolge 'FEDIT'  suchen lassen  will, wird man
  499. sich einen Filepuffer  schaffen  (oder einen bestehenden  Puffer verwenden,
  500. auf dessen Inhalt es nicht ankommt)  und die Zeichenfolge  'FEDIT' irgendwo
  501. in diesen Filepuffer schreiben;  Dann markiert man das 'F'  als Blockanfang
  502. und das  'T'  als Blockende,  geht in den Puffer zurück,  in dem man suchen
  503. lassen will (oder  in den Memory-  Modus),  positioniert den Cursor auf die
  504. Stelle,  an der die Suche beginnen soll,  und wählt 'Blockinhalt suchen' im
  505. Menu  an.  Wird  der  Suchtext  irgendwo  zwischen  der  Position,  die der
  506. aktuellen Position folgt,  und dem aktuellen Fileende gefunden, so wird der
  507. Cursor auf diese Stelle positioniert.  Um das nächste  Vorkommen zu suchen,
  508. braucht man also nur wieder 'Blockinhalt suchen' anzuwählen.
  509. Die Suche (gilt nicht für  'Suchen  und  Ersetzen')  wird  bei  Druck einer
  510. beliebigen  Taste  abgebrochen  (Bei  allen  Tasten  jedenfalls,  die einen
  511. Eintrag im Tastaturpuffer hinterlassen).  Das ist besonders  interessant im
  512. Memory-  Modus;  Files sind selten so groβ,  daβ man lange  auf die Meldung
  513. 'Nicht  gefunden'  warten müβte.  (Wen's interessiert: Um die sehr kompakte
  514. Suchschleife   nicht  mit  der   Tastaturabfrage  zu   belasten,  wird  zur
  515. Unterbrechung der Tastaturinterrupt umgeleitet)
  516.  
  517. Im  Filemodus gibt  es  auch die Möglichkeit,  sämtliche Zeichenketten, die
  518. zwischen der aktuellen Position und  dem aktuellen Fileende  mit dem Inhalt
  519. des  markierten  Blocks  übereinstimmen,  durch eine andere Zeichenkette zu
  520. ersetzen,  die auch eine andere  Länge haben kann.  Diese Zeichenfolge, die
  521. die  im  Block  markierte  Zeichenfolge  ersetzen  soll,   wird  durch  den
  522. 'Replaceblock'   markiert.  Der  Replaceblock  beginnt  direkt  hinter  dem
  523. markierten Block, das Ende kann man mit <alt>UNDO markieren.
  524. Beispiel:  Man hat ein  Textfile,  in dem man alle 'ae'  durch 'ä' ersetzen
  525. lassen will.  In einen freien Puffer  schreibe man 'aeä',  markiere das 'a'
  526. als Blockanfang,  das 'e'  als Blockende (das heiβt, nach 'ae' soll gesucht
  527. werden)  und das 'ä'  als Replaceblockende (das heiβt, für jeden gefundenen
  528. Ausdruck wird bei 'Suchen und ersetzen'  ein 'ä' eingesetzt). Dann gehe man
  529. zu dem Filepuffer, in dem die Ersetzung durchgeführt werden soll, und wähle
  530. 'Suchen und ersetzen' aus dem Menu.
  531. Für  die  umgekehrte  Ersetzung,  also  alle  'ä'  gegen  'ae',  müβte  man
  532. entsprechend  'äae'  schreiben,  das  'ä'  sowohl als  Blockanfang  wie als
  533. Blockende sowie das 'e' als Replaceblockende markieren.
  534. Wollte  man alle 'P'  aus einem File  herauslöschen,  müβte man ein 'P' als
  535. Blockanfang, Blockende UND als Replaceblockende markieren.
  536. Natürlich  braucht weder die gesuchte  noch  die ersetzte  Zeichenfolge aus
  537. Textzeichen zu bestehen. Der Inhalt ist völlig beliebig.
  538. Wenn  man Zeichenketten durch Zeichenketten anderer  Länge  ersetzt, ändert
  539. sich  naturgemäβ  die Länge des  Files;  Ist  die  eingesetzte Zeichenkette
  540. länger als die ersetzte, muβ der Filepuffer mindestens so groβ sein, daβ er
  541. das vergröβerte File  fassen kann.  (Sonst gibt es  eine Fehlermeldung, und
  542. KEINE der Ersetzungen wird durchgeführt.)
  543.  
  544. Die  Funktionen  des Suchens  und  Ersetzens  können  tatsächlich  in ihrer
  545. Wirkungsweise noch modifiziert werden. 
  546. Die Suche nach einer Zeichenkette funktioniert so,  daβ zunächst der Inhalt
  547. der aktuellen  Suchposition im File  mit dem ersten  Byte des Suchausdrucks
  548. (hier  also  des Blockinhalts)  verglichen wird;  Wenn  der  Vergleich hier
  549. erfolgreich  ist,  werden die nächsten beiden Bytes  verglichen usw.; Waren
  550. alle  Vergleiche  bis  zum  Ende  des  Suchausdrucks  erfolgreich,  ist die
  551. Zeichenkette gefunden.
  552. In FEDIT erfolgt der Vergleich zweier Bytes mithilfe  logischer Funktionen;
  553. Der Vergleich ist erfolgreich,  wenn  die logische Verknüpfung  der Bytes 0
  554. ergibt.
  555. Die  Voreinstellung  für  das  normale   Suchen  ist   die  Verwendung  der
  556. Verknüpfung 'EOR', Exklusiv- Oder. 
  557. Das  Ersetzen   kann   man   ebenfalls   über   logische   Verknüpfung  der
  558. Zielzeichenkette  mit der Replace-  Zeichenkette  erreichen. Voreingestellt
  559. ist die strikte Ersetzung.
  560.  
  561. Mit  'Verknüpfung  setzen'   aus  dem  Menu  kann  man   auswählen,  welche
  562. Verknüpfungen dem Suchen  und Ersetzen  (respektive) zugrundeliegen sollen.
  563. Bei dieser Auswahl kann man mit den Cursortasten die gewünschte Verknüpfung
  564. invers dastellen lassen, mit <Return> die Auswahl beenden.
  565.  
  566. Die möglichen Verknüpfungen für das Suchen sind:
  567.  EOR, AND, NEOR, NAND, less, greater
  568. Und die möglichen Verknüpfungen für das Ersetzen:
  569.  Replace, AND, OR, EOR, NOT Dest.  
  570.  
  571. Dabei  bedeuten  EOR  logisches  Exklusiv-  Oder,  OR  logisches  Oder, AND
  572. logisches  Und;  NEOR  und  NAND  sind  nicht  etwa  die  bitweise inversen
  573. Funktionen,  sondern EOR und AND, wobei aber der Vergleich erfolgreich ist,
  574. wenn die Verknüpfung für alle Zeichen NICHT Null ergibt.
  575. less   und   greater   sind  dann   erfolgreich,   wenn   alle   Bytes  der
  576. Zielzeichenkette kleiner bzw.  gröβer sind als die  entsprechenden Bytes im
  577. Suchausdruck.
  578. Replace  heiβt  strikte  Ersetzung  der  Zielzeichenkette;  NOT  Dest. (NOT
  579. Destination, Zielzeichenkette logisch negieren) verneint so viele Bytes der
  580. Zielzeichenkette,  wie im Replaceblock enthalten sind;  Der konkrete Inhalt
  581. des Replaceblocks wird dabei nicht verwendet.
  582.  
  583. In aller Regel wird man die Nicht- Standard- Verknüpfungen nur auf einzelne
  584. Zeichen anwenden;  Die Möglichkeit, ganze Zeichenketten zu behandeln, sowie
  585. die  Möglichkeit,  die  ersetzte  Länge  von  der  Suchlänge  unabhängig zu
  586. bestimmen,  sind eigentlich  nur Abfallprodukte  der  Standardfunktion. Man
  587. meine   also  nicht,   diesen  Möglichkeiten  müβten   häufige  Anwendungen
  588. entsprechen.
  589.  
  590. Als  ein kleines Beispiel  für die Anwendung der  Verknüpfungsmodi  mag das
  591. Problem dienen, bei allen Bytes mit gesetztem Bit 7 dieses Bit zu löschen.
  592. Dazu  gibt  es  mehrere Möglichkeiten;  Zum Beispiel schreibe man  in einen
  593. freien Puffer in zwei aufeinanderfolgende Bytes jeweils den Wert 128 ($80),
  594. der einem gesetzten 7.  Bit entspricht;  Das  erste Byte  markiere  man als
  595. Blockanfang und Blockende, das zweite als Replaceblockende. Dann setze man,
  596. wenn noch nicht geschehen,  den Verknüpfungsmodus auf NAND und EOR, gehe zu
  597. dem gewünschten Filepuffer und lasse  'Suchen und Ersetzen'.  Es werden nun
  598. alle Bytes gesucht,  bei denen Byte AND $80  NICHT 0 ergibt, bei denen also
  599. Bit 7  gesetzt ist,  und durch Byte EOR $80  ersetzt, was ein Umklappen des
  600. Bit 7  zur Folge hat.  Natürlich könnte man ebensogut als Replace- Byte den
  601. Wert 127  ($7f)  nehmen,  bei dem alle Bits bis auf Bit 7 gesetzt sind, und
  602. als Replace-  Modus AND nehmen.  Und schlieβlich braucht man bei Verwendung
  603. letzterer Verknüpfung zum Ersetzen auch beim Suchen nicht so  wählerisch zu
  604. sein,  man könnte das Suchbyte zu 0  setzen und als Find-  Verknüpfung NEOR
  605. wählen, wobei dann Byte AND $7f mit jedem Byte durchgeführt wird, das nicht
  606. gleich 0 ist.
  607.  
  608. Vielleicht  sollte  erwähnt  werden,  daβ  die  Funktionen  zum  Suchen und
  609. Ersetzen extrem schnell ablaufen;  Die Suchgeschwindigkeit beträgt ca. 80kB
  610. pro Sekunde. Das Ersetzen unter Ausdehnung des Files dauert etwa doppelt so
  611. lange wie das Ersetzen unter Verkleinerung oder Beibehaltung der  Gröβe, da
  612. hierbei das File zweimal durchsucht wird (Einmal davon,  um  die Anzahl der
  613. Ersetzungen festzustellen, und einmal beginnend von hinten zum Ersetzen).
  614.  
  615.  
  616. 4.7  Ungleichheit suchen
  617.  
  618. Wenn man herausfinden möchte,  ob Passagen in Files  identisch sind, könnte
  619. man natürlich eine der Passagen als Block markieren und vor der anderen mit
  620. der  Suche danach  beginnen.  Sind die Passagen  identisch,  wird FEDIT die
  621. Passage  als gefunden  melden.  Sind sie  aber  nicht  identisch,  wird man
  622. einfach nur ein 'nicht gefunden'  ernten, ohne zu wissen, an welcher Stelle
  623. sich die beiden nun unterscheiden.
  624. Dafür also gibt es die  Funktion 'Ungleichheit suchen';  sie vergleicht den
  625. Code ab der aktuellen Position  mit dem Inhalt  des markierten  Blockes und
  626. stoppt am ersten Byte, das unterschiedlich ist.
  627.  
  628. Also:  Man will etwa den Inhalt zweier Files vergleichen. Dazu wird man das
  629. ganze   erste   File  als   Block   markieren   (Home,  Undo,  <shift>Home,
  630. <shift>Undo),  sich  an  den Anfang  des zweiten  setzen  und 'Ungleichheit
  631. suchen' im Menu wählen.
  632.  
  633. Für diese Funktion  ist es  völlig  unwesentlich,  wo im  Speicher sich der
  634. Block befindet,  mit dem verglichen wird,  und wo im  Speicher die aktuelle
  635. Position liegt,  an der der Vergleich beginnt. Man kann etwa Teile des ROMs
  636. mit Teilen  eines Files vergleichen.  Die Funktion  steht im  File-  und im
  637. Memory- Modus gleichermaβen zur Verfügung.
  638.  
  639.  
  640. 4.8  Pfad setzen und Directory
  641.  
  642. Mit  der Menu-  Funktion 'Zugriffspfad setzen'  kann man  den  GEMDOS- Pfad
  643. verändern;  Es wird einfach die  GEMDOS-  Funktion DSETPATH (CHDIR oder CD)
  644. aufgerufen.  Alle  Filenamen zum Laden oder  Abspeichern beziehen  sich auf
  645. diesen aktuellen Pfad,  falls nicht der Filename selbst mit vorangestelltem
  646. Pfad  angegeben  wird.  Es  ist  übrigens  eine  Eigenart  von  FEDIT,  ein
  647. angesprochenes Laufwerk zum aktuellen Laufwerk zu erklären.
  648.  
  649. Mit der Menu-  Funktion 'Directory anzeigen' wird ein einfaches Verzeichnis
  650. der  Namen  von  Files  und  Unterverzeichnissen  im   aktuellen  Directory
  651. angezeigt.
  652.  
  653.  
  654. 5   Der Memory- Modus
  655.  
  656. 5.1  Unterschiede zum File- Modus
  657.  
  658. Im Memory-  Modus  wird  der gesamte  adressierbare  Speicher  des Rechners
  659. behandelt  wie ein  'File'  im  File-  Modus.  Einige  Filefunktionen sowie
  660. 'Suchen  und Ersetzen'  stehen nicht zur  Verfügung,  dafür  Funktionen zur
  661. Speicherverwaltung und zum Nachladen von Programmen.
  662.  
  663. Beim Editieren funktioniert  <shift>Home nicht,  da  man in  den seltensten
  664. Fällen an das Ende dieses 'Files' wollen wird, das bei $ffffff liegt. 
  665.  
  666. Innerhalb  des adressierbaren  Speicherbereiches liegen  zwei Bereiche, die
  667. von FEDIT ausmaskiert werden:  Der Bereich von $400000 bis $f9ffff, den die
  668. MMU nicht adressieren möchte (Bus-  Error)  und der Bereich von $ff0000 bis
  669. $ffffff, wo die Peripheriebausteine liegen, die man mit FEDIT sowieso nicht
  670. korrekt  mit Daten beschicken  könnte.  Diese  geschützten  Bereiche werden
  671. angezeigt,  als ob sie nur Null-  Werte enthielten; Ansonsten kann man hier
  672. nichts schreiben und auch  nichts  suchen  lassen.  Dieser  Schutz  ist nur
  673. gedacht, um einwandfreies Arbeiten auch in den Regionen zu ermöglichen, die
  674. an geschützte  Gebiete angrenzen (Da FEDIT dann  immer auch  ein  Stück des
  675. geschützten  Gebietes  mit anzeigen  wird)  und erhebt keinen  Anspruch auf
  676. Vollständigkeit  (Wenn  man  etwa  ein  Langwort  so  auf  das  Ende  eines
  677. ungeschützten Breiches schreibt, daβ ein Byte bereits auf einen geschützten
  678. Bereich fällt, wird man einen Bus- Error ernten; Lesen ist immer möglich).
  679. Der genannte  Schutz  existiert auch  im  Image-  Modus, nicht aber bei der
  680. Unterschiedssuche;  Zugriffe auf den  Blockbereich  werden  ebenfalls nicht
  681. kontrolliert. (Teile der geschützten Bereiche als Block zu markieren und in
  682. geschützten  Bereichen (die  sowieso völlig leer aussehen)  Unterschiede zu
  683. suchen, wird sich wohl vermeiden lassen)
  684.  
  685. Die Bereiche,  die von FEDIT ausmaskiert werden, sind als 'Systemvariablen'
  686. gegeben  und somit bei  Bedarf  zu  ändern;  Siehe  dazu  das entsprechende
  687. Kapitel.
  688.  
  689. Die  Speicherbereiche,  die weder RAM noch ROM enthalten,  liefern entweder
  690. Daten,  die bei jedem Lesen verschieden sind,  oder $ff, aber keinen Fehler
  691. beim Lesen oder Schreiben.  FEDIT schreibt ein gerade  eingegebenes Zeichen
  692. auch auf den Bildschirm,  nachdem es an  den Speicher  geschickt wurde; Was
  693. aber nicht heiβt,  daβ der Speicher  dieses  Zeichen auch  angenommen haben
  694. muβ.
  695.  
  696. Zur  Suchfunktion  ist noch  zu  bemerken,  daβ  die Suche  jeweils  an der
  697. aktuellen Position beginnt und abgebrochen wird,  wenn die Grenze  zu einem
  698. maskierten Gebiet erreicht wird.
  699.  
  700.  
  701. 5.2  Die GEMDOS- Funktionen
  702.  
  703. Im Memory-  Modus stellt FEDIT einige GEMDOS- Funktionen zur Verfügung, die
  704. sich auf die Speicherverwaltung und das Nachladen von Programmen beziehen.
  705.  
  706. - Mit 'Freier  Speicher'  bekommt man die Länge des  gröβten freien GEMDOS-
  707. Speicherblocks zurück,  wie  er  von der Funktion  Malloc(-1) zurückgegeben
  708. wird.
  709.  
  710. - 'Mfree(pos)'  gibt  den  Speicherblock  an  GEMDOS  zurück,  der  an  der
  711. aktuellen Position beginnt.
  712.  
  713. - 'Mshrink(pos)'   versucht  die  Gröβe  des  Speicherblocks,  der  an  der
  714. aktuellen Position beginnt, auf einen einzugebenden Wert zu ändern.
  715.  
  716. - 'Programm laden und starten'  führt mit der GEMDOS- Funktion Pexec, Modus
  717. 0,  ein Programm  aus.  Der Name  des Programmfiles  muβ  vollständig sein,
  718. Argumente können in der üblichen  Weise hinter  dem Programmnamen angegeben
  719. werden. Beispiel: FEDIT.PRG TEST.FIL 2000
  720.  
  721. - 'Programm  laden'  führt in  derselben Weise Pexec im  Modus  3  aus, das
  722. heiβt, das Programm wird nur in den Speicher geladen, aber nicht gestartet.
  723. Nach dem Laden ist in  üblicher  GEMDOS-  Manier der gesamte freie Speicher
  724. dem soeben geladenen Programm zugeteilt.  FEDIT setzt die aktuelle Position
  725. auf die Basepage des geladenen Programms und geht in den Edit- Modus. Diese
  726. Basepage-  Adresse ist zugleich die Adresse, die GEMDOS wieder benötigt, um
  727. das Programm zu starten, und die Adresse des GEMDOS- Speicherblocks, der zu
  728. dem Programm  gehört.  Man  kann  also  mit Mfree direkt  den Speicherblock
  729. wieder freigeben und damit das Laden 'ungeschehen' machen, oder mit Mshrink
  730. den vom Programm belegten Speicherblock zurechtstutzen.
  731.  
  732. - 'Programm(pos)  starten'  führt  Pexec im  Modus 4  aus,  wobei Pexec die
  733. aktuelle  Position  als  Basepage-  Adresse  des  zu  startenden Programmes
  734. übergeben wird, so wie bereits von 'Programm laden' vorbereitet.
  735.  
  736. Vielleicht sollte man hier erwähnen,  daβ im Gegensatz zu Pexec Modus 0 bei
  737. Pexec  Modus 4  der  vom  Programm  verwendete  Speicher  nicht automatisch
  738. freigegeben wird,  nachdem das Programm beendet ist. Man muβ also mit Mfree
  739. diesen Speicherbereich per Hand  wieder freigeben.  Einige Programme lassen
  740. sich fehlerfrei  auch  mehrmals  hintereinander mit Pexec  Modus 4 starten.
  741. (FEDIT selbst gehört sicherlich NICHT zu diesen Programmen !)
  742.  
  743. Die  Funktionen  zum Laden von  Programmen  in  FEDIT  dienen hauptsächlich
  744. Testzwecken;  Man kann  damit Programme laden,  in  ihrer Ausführungs- Form
  745. untersuchen und sich  nach  Programmende  die Änderungen  im Speicher, also
  746. hauptsächlich die produzierten Daten,  ansehen. FEDIT ist nicht als 'Shell'
  747. gedacht und erhebt keinen Anspruch, als solche besonders anwenderfreundlich
  748. zu sein.
  749.  
  750.  
  751. 6   Der Image- Modus (Speicher zeigen als Bild)
  752.  
  753. Der  'Image-  Modus'  zeigt  das File  bzw.  den Speicher  ab der aktuellen
  754. Position als Bild;  Das heiβt,  daβ ab der aktuellen Position  die Bytes in
  755. der aktuellen Zeilenbreite in das Bildschirm- RAM kopiert werden.
  756.  
  757. Voreingestellt  ist,  daβ die Darstellung  in  der  Auflösung  und  mit der
  758. Palette erfolgt,  mit denen FEDIT aufgerufen  wurde,  und  mit  der Zeilen-
  759. breite,  die  der  aktuellen  Bildschirmbreite  entspricht.  Unkomprimierte
  760. Doodle-,  Degas-,  Stad- etc. Bilder lassen sich so direkt anzeigen, da sie
  761. genau Bildschirmbreite  haben.  Im  Farbmodus läβt  sich  die Auflösung mit
  762. <shift>Help umschalten.
  763.  
  764. Nicht in Panik geraten,  wenn man einen weiβen Bildschirm vor  sich hat und
  765. der Rechner auf keine Taste zu reagieren scheint: Wenn man im Filemodus ein
  766. File anschaut,  das nur 100  Bytes lang ist, füllt das gerade mal die erste
  767. Bildschirmzeile,  und  wenn  der Filepuffer  dann noch leer  ist, sieht man
  768. nichts und bemerkt auch  nicht die Zeit,  die nötig ist,  um den Bildschirm
  769. aufzubauen.  Mit HELP  erlangt man Hilfe  und  Informationen  über aktuelle
  770. Auflösung und Zeilenbreite, mit ESC kommt man zurück zum Menu.
  771. Mit Cursor up/down verändert man die aktuelle Position und damit den Anfang
  772. der Darstellung byteweise,  mit  <shift>  up/down  zeilenweise,  mit <CTRL>
  773. up/down halbseitenweise.  'Halbseitenweise'  ist  exakt,  d.h.  mit zweimal
  774. <CTRL>down kommt man genau eine Bildschirmweite weiter,  im Normalfall also
  775. zunächst genau 32000 Bytes. (Das kann dann interessant sein, wenn man einen
  776. Bildschirmbereich  etwa  als   Block  markieren  will:   Man  markiert  den
  777. Blockanfang,  geht  in  den Image-  Modus,  zweimal <CTRL>down, verläβt den
  778. Image-  Modus,  geht  ein Byte  zurück  (denn da  ist das  letzte  Byte des
  779. Bereichs) und markiert das Blockende.)
  780.  
  781. Zur Zeilen-  oder Anzeigebreite  ist  zu  sagen,  daβ  der  Bildschirm eine
  782. Zeilenbreite in Bytes hat,  die man den Line  A-  Variablen entnehmen kann;
  783. Die dargestellte  Breite  läβt  sich  im Image-  Modus byteweise mit Cursor
  784. left/right,  in Schritten von 8 Bytes mit <shift> left/right verändern oder
  785. mit Undo direkt als Zahlenwert eingeben.
  786. Wenn die Anzeigebreite kleiner  ist  als  die  verfügbare Bildschirmbreite,
  787. wird die neue Bildschirmzeile einfach früher begonnen; ist sie gröβer, wird
  788. die Ausgabe der Zeile mit Ende der Bildschirmzeile beendet. Man hat also im
  789. ersteren Fall  nur ein entsprechendes  Stück des linken  Bildrandes mit dem
  790. angezeigten  Bild  belegt,  im letzteren Fall  fehlt  der  rechte  Rand des
  791. Bildes.
  792.  
  793. Die Desktop-  Icons etwa lassen sich bei einer Anzeigebreite von 4 Bytes im
  794. ROM (6.02.86) bei $fd8286 und im tiefen RAM lokalisieren (Cursor setzen auf
  795. Adresse,  im Menu Image- Modus wählen). Mit variabler Breite speichert GEM,
  796. auch irgendwo im tiefen RAM, den Ausschnitt des Bildschirms, der gerade von
  797. einem heruntergeklappten  Pull-  Down-  Menu verdeckt wird  (FEDIT resident
  798. machen, Menu herunterklappen und nachsehen).
  799.  
  800. Der Image-  Modus ist speziell auch gut geeignet,  um sich  einen Überblick
  801. über die  Speicherbelegung zu verschaffen,  und über die  grobe Struktur in
  802. den Daten eines Programmes.
  803.  
  804.  
  805. 7   FEDIT resident; Aufruf und Einschränkungen
  806.  
  807. 7.1  Allgemeines
  808.  
  809. FEDIT  ist resident  installierbar.  Zum einen behält  FEDIT beim Resident-
  810. machen  die  bereits  bei   normalem  Aufruf  (während   seiner  Aktivität)
  811. bestehende Eigenschaft,  sich nach einem RESET noch vor dem Booten (und dem
  812. Löschen  des Speichers)  für eventuelle Datenrettung etc.  zur Verfügung zu
  813. stellen;  Zum zweiten hängt sich FEDIT in die VBL- Queue ein, um sich durch
  814. eine   Shifttastenkombination    (Voreingestellt:   CTRL-ALT-lSHIFT-rSHIFT)
  815. aktivieren zu  lassen.  Dafür reserviert sich FEDIT  zunächst einen eigenen
  816. 32k- Bildschirmspeicher, dann wird das Programm beendet.
  817.  
  818. FEDIT verwendet  für die Abfragen  beim VBL einige Systemvariablen,  die in
  819. verschiedenen TOS- Versionen unterschiedlich sind; Erst beim Residentmachen
  820. werden  diese  Adressen  entsprechend  dem  TOS-   Datum  aus  der  Tabelle
  821. entnommen.  Wenn für die verwendete  TOS-  Version kein  Eintrag auffindbar
  822. ist,  wird das Residentmachen abgebrochen.  Im Fall,  daβ man 'Resident' im
  823. Memory-  Menu gewählt hat, flackert die entsprechende Meldung nur kurz auf,
  824. danach wird der Bildschirm neu aufgebaut.
  825.  
  826. Für Leute,  die zuviel nachdenken, sei bemerkt, daβ FEDIT immer -ob nun als
  827. Programm aufgerufen, durch RESET oder Shifttasten aktiviert- über denselben
  828. Menupunkt  beendet  wird.   FEDIT  entscheidet  selbst,  ob  damit  'Prozeβ
  829. beenden',  'Rücksprung zur Resident-  Aufrufschleife'  oder 'Rücksprung zur
  830. VBL- Routine, Interrupt wieder aktivieren' gemeint ist.
  831.  
  832.  
  833. 7.2  RESET- Residenz
  834.  
  835. Nach einem RESET macht FEDIT keine Anstalten, seinen belegten Speicher-
  836. bereich von GEMDOS zurückzufordern;  FEDIT ist also in diesem Moment nur
  837. ein Stück Code im freien Speicher,  und auch eventuell vor dem RESET
  838. belegte Pufferbereiche sind für GEMDOS  vogelfrei, obwohl sie von FEDIT
  839. noch genauso behandelt werden wie vorher. Man kann nach dem RESET neue
  840. Puffer schaffen (Wenn FEDIT aus dem Auto-  Ordner gestartet wurde, muβ man
  841. das sogar,  weil  man sich  im Aufrufschirm von FEDIT  befindet); Diese
  842. neuen Puffer  werden  nun beim  GEMDOS  angefordert und normal  belegt. Das
  843. Problem ist, daβ die neuen Puffer nun da liegen, wo nach Meinung von GEMDOS
  844. unbenutzter  Speicher  anfängt;  Sie  überschreiben  also  einen  Teil  des
  845. Speichers, beginnend im tiefen RAM, und auch den residenten Teil von FEDIT,
  846. wenn  sie groβ  genug sind (Einige 10kB Freiraum wird man haben, bis das
  847. geschieht).  Es sei also  der Hinweis erlaubt,  daβ man nur möglichst
  848. geringe Puffergröβen  neu belegen  sollte.  Um  Daten  zu retten, benutze
  849. man die Funktion  'Block  abspeichern'  und bearbeite man den Block wenn 
  850. möglich vom hochgefahrenen  Rechner  aus,  anstatt  ihn  zum jetzigen
  851. Zeitpunkt in  einen Puffer  zu  transferieren.  (Die Einschränkungen gelten
  852. sämtlich NICHT für Puffer, die bereits vor dem RESET existierten.)
  853.  
  854. Puffer,  die nach dem RESET geschaffen wurden, sollte man vor Verlassen von
  855. FEDIT wieder  freigeben,  da sie sonst weiterhin  Speicher belegen. (Andere
  856. Puffer kann man nun nicht freigeben; Das merkt man, wenn man es versucht)
  857. Nach Verlassen von FEDIT bootet der Rechner (nach Ausführung  evtl. anderer
  858. resetresidenter Programme),  als  ob  nichts gewesen wäre.  Wie gesagt, ist
  859. FEDIT danach verschwunden;  es muβ neu geladen (oder  mit gebootet) werden,
  860. um wieder zur Verfügung zu stehen. FEDIT ist also NICHT reset- RESISTENT.
  861.  
  862.  
  863. 7.3  'Unbedingter' Aufruf
  864.  
  865. Nach betätigen der  Shifttastenkombination  steht  FEDIT  in  der  Form zur
  866. Verfügung,  in der es  verlassen wurde.  Die alten  Puffer  kann  man nicht
  867. freigeben,  da der Prozeβ 'FEDIT'  ja für GEMDOS beendet ist. Wohl kann man
  868. neue Puffer schaffen,  sollte sie aber sicherheitshalber vor  Beendigen von
  869. FEDIT wieder freigeben, da sie den unterbrochenen Prozeβ stören könnten (es
  870. ist  zwar  unwahrscheinlich,  aber  vielleicht  rechnet  das  unterbrochene
  871. Programm nicht damit,  daβ plötzlich Speicherbereiche belegt sind, die eben
  872. noch frei waren, ohne daβ das Programm selbst zwischenzeitlich irgendwelche
  873. Betriebssystemcalls gemacht hat).
  874. Schädlich könnte auch sein, wenn man dem unterbrochenen Programm das
  875. aktuelle Laufwerk und Directory verstellt. Wie bereits gesagt, wird das
  876. Laufwerk bereits gewechselt, wenn man ein anderes Laufwerk anspricht.
  877.  
  878.  
  879. 7.4  Bedingter Aufruf
  880.  
  881. Mit dem Punkt 'Blockwatch on/off' im Memory- Menu kann man den 'Bedingten
  882. Aufruf' aktivieren. Die Bedingung dabei ist, daβ FEDIT nur noch dann
  883. aktiviert wird, wenn
  884. - die dafür vorgesehene Shifttastenkombination betätigt ist (voreingestellt
  885. ist lSHIFT rSHIFT)
  886. - der VBL- Interrupt stattfindet UND
  887. - sich der Program Counter beim Interrupt gerade im markierten Blockbereich
  888. befindet.
  889.  
  890. Mit der Tastenkombination für den 'unbedingten' Aufruf kann man immer noch
  891. zu dessen Konditionen FEDIT aktivieren.
  892.  
  893. Eigentlich ist diese Funktion beim Austesten von FEDIT entstanden, als
  894. FEDIT genau dann abstürzte, wenn der Interrupt zwischen zwei bestimmte
  895. Maschinenbefehle im BIOS traf; Um zu überprüfen, das dies nun keine
  896. Probleme mehr macht, hätte ich natürlich endlos Aufrüfe machen und jedesmal
  897. kontrollieren können, ob der Interrupt (ohne Absturz) nun an der heiklen
  898. Stelle kam (Siehe den Abschnitt über die 'Systemvariablen'); Stattdessen
  899. markierte ich die heikle Adresse und hielt die Tasten solange gedrückt, bis
  900. FEDIT selbst die Unterbrechung an dieser Stelle diagnostizierte. Und nicht
  901. abstürzte.
  902. Der Anwender kann die Funktion verwenden, um festzustellen, ob ein
  903. bestimmter Programmteil (wiederholt) aufgerufen wird, etwa Teile des
  904. Betriebssystems oder die Line F- Routinen im RAM; Oder um die
  905. Aufrufsicherheit von FEDIT zu erhöhen, wenn wider Erwarten die
  906. Unterbrechung von Programmen an bestimmten Stellen zum Absturz führen
  907. sollte (Dann: Einen Programmteil markieren, der oft aufgerufen wird und
  908. harmlos zu unterbrechen ist). Allerdings lagen die einzigen Schwierig-
  909. keiten, die bei mir aufgetreten sind, bei der Unterbrechung von Betriebs-
  910. systemroutinen; Und auch das sollte ja behoben sein.
  911.  
  912.  
  913. 7.5  Beschränkungen des Aufrufs
  914.  
  915. Der  Aufruf  des residenten  FEDIT  über  die  Tastatur  erfährt  zwei Ein-
  916. schränkungen bezüglich des Zustands  des Rechners  zum  Zeitpunkt  des VBL-
  917. Interrupts:
  918. - Es werden keine GEMDOS- Funktionen unterbrochen
  919. - Die Systemvariable FLOCK ($43e.w) muβ Null sein (Kein Floppy- Zugriff).
  920.  
  921. Wenn  GEMDOS-  Funktionen sozusagen im  'sample'-  Modus aufgerufen werden,
  922. also ohne selbst die Kontrolle bis Eintritt eines bestimmten Ereignisses zu
  923. behalten,  wird man kaum merken, daβ ein paar Interrupts für den Aufruf von
  924. FEDIT ausfallen,  indem sie den Rechner  gerade  in  einer  GEMDOS- Routine
  925. erwischen.  Gerade besonders einfache Programme ohne GEM aber (zum Beispiel
  926. Shells)  tätigen  ihre Eingabe oft  über 'request'-  Aufrüfe von GEMDOS wie
  927. Cconin.  Ein  solches Programm  verbringt  einen  Groβteil  seiner  Zeit im
  928. GEMDOS,  und kann speziell dann nicht unterbrochen  werden,  wenn es gerade
  929. auf Tastatureingabe wartet. Man kann auch aus einem solchen Programm heraus
  930. FEDIT  aufrufen,   wenn  man   die  Tastenkombination  gedrückt   hält  und
  931. gleichzeitig  Buchstaben  eintippt;  Nach jedem Buchstaben  wird das GEMDOS
  932. (zumindest kurz) verlassen.
  933. Beim Ausprobieren der Unterbrechungseinrichtung habe  ich den  Rechner auch
  934. schon mal beim  Laden eines Programmes  unterbrochen,  also  in  einer sehr
  935. heiklen Lage  (Diskettenzugriff,  GEMDOS-  Funktion). FEDIT lief, aber nach
  936. Rückkehr krachte es.  Trotz der Beschränkungen, die nun bestehen, kommt man
  937. noch recht  gut zum Zuge,  etwa zwischen Programm-  und Resourceladen. (Man
  938. halte einmal während des Ladens eines Programmes  von Diskette  die Aufruf-
  939. tasten gedrückt)
  940.  
  941.  
  942. 7.6  Anpassung an weitere TOS- Versionen
  943.  
  944. Zur  Anpassung  von   FEDIT  an   weitere  TOS-   Versionen  kann  man  die
  945. Anpassungstabelle  ändern,  die  am  Ende des FEDIT-  Programmes mit 'ADR>'
  946. markiert ist.  (Also:  FEDIT.PRG starten,  FEDIT.PRG  laden,  freien Puffer
  947. erzeugen,  dort  'ADR>'  hineinschreiben,  'ADR>'  als Block  markieren, im
  948. vorigen Puffer suchen lassen.)  Es folgen 5  Tabelleneinträge aus jeweils 5
  949. Langworten.  Davon sind zunächst die ersten drei belegt; Vom Zeichen hinter
  950. '>'  aus müβte man also  60  Zeichen weitergehen,  um zum ersten unbelegten
  951. Eintrag  zu  gelangen  (5  Langwort-  Nullen).  In  die  Langworte  gehören
  952. geschrieben:
  953.  
  954. - Das  Datum des Betriebssystems in  Hex:  z.B.  $02061986 für 6.2.1986. An
  955. dieses Datum kommt man, indem man in FEDIT im Memory- Modus auf Adresse $18
  956. setzt,  <shift>F4  drückt, um den Merker 1 auf $18 zu setzen, FEDIT auf die
  957. Adresse $4f2 (_sysbase) setzt, <alt>F4 betätigt (Vorausgesetzt, es herrscht
  958. noch der default- Langwort- Modus) und den Wert ausliest, indem man im Hex-
  959. Anzeigemodus F3  drückt.  (Das Datum im  richtigen Format  steht nämlich im
  960. Langwort ab Offset $18 im Header des Betriebssystems.)
  961.  
  962. - Die Adresse der Speicherposition, in die das Betriebssystem den aktuellen
  963. Shiftstatus  (als  Bytewert)  schreibt.  Im  TOS  vom  6.02.86  lautet  ein
  964. zuständiger Teil:
  965. FC29AA: move.b shiftstat(A5),D1
  966.         cmp.b #$2a,D0
  967.         bne zzz
  968.         bset #1,d1
  969. zzz:    ...
  970.  
  971. - Die Adresse des Save-  Bereichs des BIOS  (Oberste  Adresse  eines Stack-
  972. Gebildes);  Dies ist der normale Wert, den man vorfindet, wenn man sich mit
  973. FEDIT Speicherstelle $4a2.l anschaut (savptr). Aus Kontrollgründen dazu ein
  974. Auszug aus dem TOS vom 6.02.86,  beginnend mit der Adresse  des  BIOS (Trap
  975. #13, zu finden in Speicherstelle $b4):
  976. FC074E: lea  ...,A0
  977.         move.l savptr,A1 ; (savptr).l=biossav
  978.         move.w (sp)+,D0 ; Statusregister
  979.         move.w D0,-(A1)
  980.         move.l (sp)+,-(A1) ; Returnadresse 
  981.         movem.l D3-D7/A3-A7,-(A1) ; Also 11 Langwörter, 1 Wort gesichert
  982.         move.l A1,savptr
  983.         ...
  984.  
  985. - Die Adresse der Adresse des Save- Bereichs des GEMDOS (gemdossav) und die
  986. oberste Adresse des GEMDOS-  eigenen Stacks (gemdosstack). Dazu das TOS vom
  987. 6.02.86:
  988. FC4D48: btst #5,(sp) ; $fc4d48 ist die Adresse vom GEMDOS- Handler und 
  989.         bne.s        ;  steht als solche bei trap #1, in $84
  990.         move.l usp,a0
  991.         cmpi.w #$20,(a0)
  992.         ...
  993.         move.l A6,-(sp)
  994.         movea.l gemdossav,a6
  995.         movem.l D0/A3-A5,$68(A6)
  996.         move.l (sp)+,$78(A6)
  997.         ...
  998.         move.l A5,$7c(A6) ; Also 6 Langworte insgesamt gesichert
  999.         movea.l #gemdosstack,sp
  1000.         lea.l $32(A5),A0
  1001.         bra.s
  1002.         movem.l
  1003.         ...
  1004.         move.l sp,$7c(A6)
  1005.         lea.l $32(sp),a0
  1006.         movea.l #gemdosstack,sp
  1007.         ...
  1008.  
  1009.  
  1010. 8   FEDIT- 'Systemvariablen'
  1011.  
  1012. 8.1  Inhalt des entsprechenden Bereichs von FEDIT
  1013.  
  1014. Ein Auszug aus dem initialisierten Datenbereich:
  1015.  
  1016.    .DC.b "ADR>"   ; Damit man die Adressentabelle findet
  1017. adr_table:  
  1018.    ; Format: Tosdatum.l, shiftstat.l, biossav.l, gemdossav.l, gemdosstack.l
  1019.    .DC.l $2061986,$e1b,$93a,$602c,$166e   ; erstes ROMTOS
  1020.    .DC.l $4221987,$e61,$93a,$87ce,$16ce   ; Blitter- ROMTOS
  1021.    .DC.l $5181988,$e63,$93a,$5528,$2a3c   ; neues RAMTOS
  1022.    .DC.l 0,0,0,0,0
  1023.    .DC.l 0,0,0,0,0
  1024.    .DC.l 0  ; Die Ende- Marke
  1025.  
  1026.    .DC.b "MSK>"   ; Damit man die maskierten Speicherbereiche findet
  1027. maskber1s:  .DC.l $400000  ; Start erster maskierter Bereich
  1028. maskber1e:  .DC.l $f9ffff  ; Ende (einschlieβlich)
  1029. maskber2s:  .DC.l $ff0000  ; Start zweiter 
  1030. maskber2e:  .DC.l $ffffff  ; Ende
  1031.  
  1032. fedpalette: 
  1033.    .DC.w $777,$700,$70,$0,$111,$222,$333,$444
  1034.    .DC.w $555,$7,$1,$10,$100,$200,$20,$2
  1035.  
  1036.    .DC.b "PAL>"   ; Damit man die 34 DEGAS- Headerbytes findet
  1037. storerez:   .DS.w 1  ; Auflösung sichern
  1038. storepalette:  
  1039.    .DCB.w 16,0
  1040.  
  1041.    .DC.b "ORSCR>" ; Damit man den Bildschirm findet
  1042. orgscreen:  .DC.l 0  ; Speicher für Bildschirmadr bei VBL- Aufruf
  1043. fedscreen:  .DC.l 0  ; Eigener Bildschirm
  1044.  
  1045.    .DC.b "SFTMD>" ; Damit man das Modus- Byte findet
  1046. action_shift:  .DC.b %1111 ; ALT CTRL LSHIFT RSHIFT zum Aktivieren
  1047. bwatch_shift:  .DC.b %11   ; LSHIFT RSHIFT zum Aufruf aus Blockbereich
  1048. bwatch_flag:   .DC.b 0  ; Flag für Aufruf nur für PC im Blockbereich
  1049. store_conterm: .DC.b 0
  1050. st_crsrmode:   .DC.b 0,0   ; Flag f. Cursorstatus on/off
  1051.  
  1052. zbasis:  .DC.w 10 ; Zahlenbasis für Ausgaben
  1053.  
  1054.    .DC.b "ORSTK>" ; Damit man den Aufrufstack findet
  1055. sav_ssp: .DC.l 0
  1056. fedstack:   .DC.l 0
  1057.    .DC.b "IADDR>" ; Damit man die Interruptadresse findet
  1058. interrupt_at:  .DC.l 0
  1059.  
  1060. inpbuffer:  .DC.b 80,0
  1061. inpbeg:  .DCB.b 82,0 ; Zum Addieren des Command tail counters
  1062.  
  1063.  
  1064. 8.2  Und Erläuterungen dazu
  1065.  
  1066. - Adressentabelle zum Anpassen des Interrupt- Teils. Marke: 'ADR>'
  1067. 5*5 Langworte, siehe 'FEDIT resident'
  1068. 0.l als Tabellenabschluβ
  1069.  
  1070. - Die Begrenzungen der ausmaskierten Speicherbereiche. Marke: 'MSK>'
  1071. 2*2 Langworte, jeweils Start/Endadresse des Bereichs (inklusive)
  1072.  
  1073. - Die von FEDIT verwendete Farbpalette
  1074. 16 Worte
  1075.  
  1076. - Der DEGAS- kompatible Farbzustand bei Aufruf von FEDIT. Marke: 'PAL>'
  1077. 1 Wort Auflösung (0-2=PI1-PI3); 16 Worte Palette
  1078. Zum Beispiel kann man das Bild,  das bei der Unterbrechung angezeigt wurde,
  1079. im DEGAS-  Format abspeichern,  indem man diese 17 Worte als Block markiert
  1080. und als ebensolchen abspeichert; Sodann mit 'ORSCR>' auf das erste Byte des
  1081. Originalschirms positioniert,  Blockanfang markiert, 31999 Bytes weitergeht
  1082. (im  Image-  Modus zwei  Halbseiten  vor und  ein  Byte  zurück), Blockende
  1083. markiert und diesen Block an den DEGAS- Header anhängt, indem man ihn unter
  1084. demselben Namen abzuspeichern versucht und die Frage richtig beantwortet.
  1085. Allerdings gibt es zu diesem Zweck eigene Programme (SNAPSHOT).
  1086.  
  1087. - Die Bildschirmadressen bei der Unterbrechung und von FEDIT; 'ORSCR>'
  1088. 2*1 Langworte
  1089. Man kann etwa auf den  Anfang des Original-  VideoRAMs positionieren, indem
  1090. man  hinter  'ORSCR>'  <alt>F4  drückt, vorausgesetzt, man ist im Long pos.
  1091. Modus  und im Merker F4  steht die unberührte  Adresse 0.  Man versuche nun
  1092. einmal den Image- Modus !
  1093.  
  1094. - Bitmuster für die Aufruf- Tastenkombinationen und diverse; 'SFTMD>'
  1095. Hinter 'SFTMD>' wird der Cursor durch Drücken von <ctrl>UNDO gesetzt.
  1096. 2*1  Byte  Shifttastenzustände  für  Aktivierung  des  residenten  FEDIT im
  1097. Format, wie es von der BIOS- Funktion 11 (Kbshift) geliefert wird
  1098. (Bit 6=lMaus, rMaus, CAPS, ALT, CTRL, lSHIFT, rSHIFT=Bit 0)
  1099. Erstes  Byte  Kombination für  normalen  Aufruf;  zweites  Byte Blockwatch-
  1100. Aufruf
  1101. 1  Byte Blockwatch-  Flag; 1 Byte Kopie der Systemvariable Conterm ($484.b)
  1102. beim Aufruf von FEDIT; 2 Bytes;
  1103. 1 Wort Zahlenbasis für die Zahlenausgabe (wird von FEDIT zwischen 10 und 16
  1104. geschaltet;  Wer gern  Zahlen  zur Basis 25  o.  dgl. sieht, mag hier seine
  1105. Lieblingszahl eintragen. Beim nächsten Umschalten der Basis mit FEDIT steht
  1106. hier  wieder  10  oder 16.  Es sollte übrigens nicht wundern,  daβ man beim
  1107. Ansehen dieser Variablen mit F2 immer die Ausgabe '10' erhalten wird).
  1108.  
  1109. - Stackpointer bei Aufruf von FEDIT und FEDIT- Stacktop. Marke: 'ORSTK>'
  1110. 2*1  Langwort  SP  beim  Aufruf  von  FEDIT  durch  die  VBL-  Routine  und
  1111. anfänglicher SP des FEDIT- eigenen Stacks.
  1112. Auf dem Originalstack findet man vor:
  1113. 0.l:  Returnadresse zur VBL- Routine
  1114. 4.l:  D7/A0 gesicherte Register der VBL- Routine
  1115. 12.l: D0-D7/A0-A6 Register des unterbrochenen Programmes
  1116. 72.w: sr Statusregister des unterbrochenen Programmes
  1117. 74.l: Returnadresse vom VBL- Interrupt=Adresse der Unterbrechung
  1118.  
  1119. - Adresse der Unterbrechung des Programmes. Marke: 'IADDR>'
  1120. 1 Langwort
  1121. Hier entledigt FEDIT den Benutzer von der Mühe,  sich diese Adresse auf dem
  1122. Stack  anzusehen (Dabei  wäre  das ganz  einfach:  Marker F4 auf 74 setzen,
  1123. hinter 'ORSTK>' <alt>F4 drücken, und man ist am Ziel seiner Träume)
  1124.  
  1125. - Platz zur Aufnahme von Zeileneingaben.
  1126.  
  1127.  
  1128. 9   Beispiele für den Umgang mit FEDIT
  1129.  
  1130. Was man mit FEDIT zum Beispiel machen kann:
  1131.  
  1132. - Files patchen. 
  1133. (Für nicht-  Anglikaner (oder wie hieβ das Wort  doch  gleich ?): <patchen>
  1134. steht für das gezielte Verändern von Files,  vor allem Programmen, an einer
  1135. oder an wenigen Stellen) 
  1136. Zum   Beispiel   haben   unverständlicherweise   einige   Programme   feste
  1137. Laufwerkskennungen,  auf  denen  sie  bestimmte  Dateien  suchen.  Das  ist
  1138. ärgerlich  bei Verwendung einer  Platte oder Ramdisk (denn  meistens lautet
  1139. die feste Kennung 'A:').  Mit FEDIT kann man diese Kennung  umbenennen oder
  1140. ganz  entfernen (in letzterem Fall  wird  dann  auf dem  aktuellen Laufwerk
  1141. gesucht, was zumeist auch die beste Wahl ist). Zeichenketten enden meistens
  1142. mit  einem Nullbyte,  so daβ es  kein Problem darstellt,  sie zu verkürzen.
  1143. (Dazu noch der Hinweis, daβ <verkürzen> natürlich nicht meint, daβ hier die
  1144. Delete- Taste zum Einsatz kommen sollte: Wenn man nicht genau weiβ, was man
  1145. da  tut,   sollte  man  die  Länge  eines  Programmfiles  auf   jeden  Fall
  1146. unverändert  lassen  !  Das Mittel heiβt also:  Entweder den Pfadnamen ganz
  1147. von Hand über das Vorhandene schreiben oder als Block hochkopieren.)
  1148.  
  1149. - Sich die möglichen Ausgaben eines Programmes anschauen. 
  1150. Meistens verwenden Programme keinen  Sprachgenerator,  der  die notwendigen
  1151. Meldungen zur Zeit ihrer Ausgabe formulieren würde,  sondern die menschlich
  1152. anmutenden  Sätze,  mit  denen  der  Rechner  den  Laien  verwirrt,  stehen
  1153. betrügerischerweise bereits  säuberlich zumeist am Ende  der Programmdatei.
  1154. (Beispiel:  FEDIT besteht fast zur Hälfte aus Text.) Oft erfährt der geübte
  1155. Beobachter aus dem Anschauen eines Programmes  mehr  über die Möglichkeiten
  1156. und  Grenzen  desselben  als  aus  dem  Handbuch  (was  zweifellos  an  den
  1157. Handbüchern liegt).
  1158.  
  1159. - Sich einen Einblick in Datenstrukturen im weitesten Sinne verschaffen.
  1160. Wenn  man Programme  schreibt,  die  bestimmte  Datenformate  erzeugen oder
  1161. verarbeiten sollen,  kann man sich  mit FEDIT ansehen,  wie  das Zielformat
  1162. aussieht und  ob  die  bisherige  Ausgabe  eigener  Programme  sich  an die
  1163. gegebenen Regeln hält.
  1164.  
  1165. - Ich habe FEDIT bereits dazu verwendet,  Texte zu bearbeiten, die entweder
  1166. durch  eine  Fülle  formatierender  Leerzeichen  auf  für  andere Programme
  1167. unverarbeitbare  Gröβe aufgebläht  waren (->Ersetzen  doppelter Leerzeichen
  1168. durch einfache)  oder die für bestimmte Texteditoren unleserlich waren (das
  1169. gibt's,  daβ Texteditoren einfach njet zu  einem Text sagen,  ohne etwa den
  1170. Versuch  zu  machen,  zu lange Zeilen  abzuknicken oder  Zeichen, die nicht
  1171. vorkommen dürfen,  zu überlesen).  In beiden Fällen kann man mit  FEDIT und
  1172. ein bischen Überblick wieder lesbare Zustände einkehren lassen.
  1173.  
  1174. - Beim  Erstellen dieser  Dokumentation  geschah  es,  daβ  ein  Sektor des
  1175. Dokumentationsfiles  unlesbar  wurde;   Das  Programm,   mit  dem  ich  sie
  1176. erstellte,  war auch  nach  Ersetzen  der  entstandenen  Leerbereichs durch
  1177. unverfängliche  Schriftzeichen  (mit  FEDIT)  nicht  dazu  zu  bewegen, das
  1178. Dokument  wieder  an Sohnes Statt anzunehmen,  da es  im gelöschten Bereich
  1179. wohl ganz bestimmte Formatzeichen erwartete;  Das ist  besonders ärgerlich,
  1180. da ja nur ein sehr geringer Teil des Dokuments tatsächlich gelöscht war.
  1181. Mit FEDIT  habe ich nun  die Partien,  die ich seit dem  letzten Backup neu
  1182. geschrieben hatte,  extrahiert und daraus durch  ersetzen der Steuerzeichen
  1183. ASCII-  Texte  gemacht,  die sich  vom Programm  anstandslos in  das Backup
  1184. einladen lieβen.
  1185.  
  1186.  
  1187. 10  Abschied
  1188.  
  1189. So long, 
  1190. yours,
  1191.  
  1192. Bernd
  1193.